package com.ingenio.dao;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.ingenio.Adapter;
import com.ingenio.business.Localidad;
import com.ingenio.business.Sucursal;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class SucursalAdapter extends Adapter{
	
	public Sucursal devolverSucursal(Integer id) throws Exception{
    	Connection conn = null;
    	Sucursal s = null;
    	PreparedStatement stmt = null;
    	try {
    		conn = (Connection) abrirConexion();
    		String sel ="SELECT descSucursal, IdLocalidad, calleDirSucursal, nroExteriorDirSucursal, nroInteriorDirSucursal, telefonoSucursal, faxSucursal FROM sucursal WHERE IdSucursal = ? and sucHabilitado = 1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		stmt.setInt(1, id);
    		
    		ResultSet result = stmt.executeQuery();
    		
    		if(result.next()){
    			Integer idLocalidad = result.getInt("IdLocalidad");
    			String descripcion = result.getString("descSucursal");
    			String calleDirSucursal = result.getString("calleDirSucursal");
    			String nroExteriorDirSucursal = result.getString("nroExteriorDirSucursal");
    			String nroInteriorDirSucursal = result.getString("nroInteriorDirSucursal");
    			String telefonoSucursal = result.getString("telefonoSucursal");
    			String faxSucursal = result.getString("faxSucursal");
    			LocalidadAdapter la = new LocalidadAdapter();
    			Localidad l = la.devolverLocalidad(idLocalidad); 
    			s = new Sucursal(id, descripcion, calleDirSucursal, nroExteriorDirSucursal, nroInteriorDirSucursal, telefonoSucursal, faxSucursal, l, true);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return s;
    }
	
	public List<Sucursal> devolverSucursales() throws Exception{
    	Connection conn = null;
    	List<Sucursal> sucursales = new ArrayList<Sucursal>();
    	PreparedStatement stmt = null;
		try {
			conn = (Connection) abrirConexion();
    		Sucursal s = null;
    		String sel ="SELECT IdSucursal, descSucursal, IdLocalidad, calleDirSucursal, nroExteriorDirSucursal, nroInteriorDirSucursal, telefonoSucursal, faxSucursal FROM sucursal WHERE sucHabilitado = 1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		ResultSet result = stmt.executeQuery();
    		while(result.next()){
    			Integer idSucursal = result.getInt("IdSucursal");
    			Integer idLocalidad = result.getInt("IdLocalidad");
    			String descripcion = result.getString("descSucursal");
    			String calleDirSucursal = result.getString("calleDirSucursal");
    			String nroExteriorDirSucursal = result.getString("nroExteriorDirSucursal");
    			String nroInteriorDirSucursal = result.getString("nroInteriorDirSucursal");
    			String telefonoSucursal = result.getString("telefonoSucursal");
    			String faxSucursal = result.getString("faxSucursal");
    			LocalidadAdapter la = new LocalidadAdapter();
    			Localidad l = la.devolverLocalidad(idLocalidad); 
    			s = new Sucursal(idSucursal, descripcion, calleDirSucursal, nroExteriorDirSucursal, nroInteriorDirSucursal, telefonoSucursal, faxSucursal, l, true);
    			sucursales.add(s);
    		}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
    	return sucursales;
    }
	
	public List<Sucursal> devolverSucursalesLocalidad(Localidad l) throws Exception{
    	Connection conn = null;
    	List<Sucursal> sucursales = new ArrayList<Sucursal>();
    	PreparedStatement stmt = null;
		try {
			conn = (Connection) abrirConexion();
    		Sucursal s = null;
    		String sel ="SELECT IdSucursal, descSucursal, IdLocalidad, calleDirSucursal, nroExteriorDirSucursal, nroInteriorDirSucursal, telefonoSucursal, faxSucursal FROM sucursal WHERE sucHabilitado = 1 AND IdLocalidad=?";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		stmt.setInt(1, l.getIdLocalidad());
    		ResultSet result = stmt.executeQuery();
    		while(result.next()){
    			Integer idSucursal = result.getInt("IdSucursal");
    			String descripcion = result.getString("descSucursal");
    			String calleDirSucursal = result.getString("calleDirSucursal");
    			String nroExteriorDirSucursal = result.getString("nroExteriorDirSucursal");
    			String nroInteriorDirSucursal = result.getString("nroInteriorDirSucursal");
    			String telefonoSucursal = result.getString("telefonoSucursal");
    			String faxSucursal = result.getString("faxSucursal");
    			s = new Sucursal(idSucursal, descripcion, calleDirSucursal, nroExteriorDirSucursal, nroInteriorDirSucursal, telefonoSucursal, faxSucursal, l, true);
    			sucursales.add(s);
    		}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
    	return sucursales;
    }
	
	public void agregarSucursal(Sucursal sucursal) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
	    	conn = (Connection) abrirConexion();
	    	String add ="INSERT into sucursal (descSucursal, IdLocalidad, calleDirSucursal, nroExteriorDirSucursal, nroInteriorDirSucursal, telefonoSucursal, faxSucursal, sucHabilitado) " +
					"VALUES (?,?,?,?,?,?,?,1)";
	    	stmt = (PreparedStatement) conn.prepareStatement(add);
	    	stmt.setString(1, sucursal.getDescSucursal());
	    	stmt.setInt(2, sucursal.getLocalidad().getIdLocalidad());
	    	stmt.setString(3, sucursal.getCalleDirSucursal());
	    	stmt.setString(4, sucursal.getNroExteriorDirSucursal());
	    	stmt.setString(5, sucursal.getNroInteriorDirSucursal());
	    	stmt.setString(6, sucursal.getTelefonoSucursal());
	    	stmt.setString(7, sucursal.getFaxSucursal());
			stmt.execute();
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
	}
	
	public void eliminarSucursal(Sucursal sucursal) throws Exception{
    	Connection conn = null;
    	PreparedStatement stmt = null;
    	try {
	    	conn = (Connection) abrirConexion();
	    	
			String del ="UPDATE sucursal SET sucHabilitado = 0 WHERE IdSucursal = ?";
			stmt = (PreparedStatement) conn.prepareStatement(del);
			stmt.setInt(1, sucursal.getIdSucursal());
			stmt.execute();
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
    }
	
	public void modificarSucursal(Sucursal sucursal) throws Exception{
    	Connection conn = null;
    	PreparedStatement stmt = null;
    	try {
	    	conn = (Connection) abrirConexion();
	    	String upd ="UPDATE sucursal SET descSucursal=?, IdLocalidad=?, calleDirSucursal=?, nroExteriorDirSucursal=?, nroInteriorDirSucursal=?, "+
	    			"telefonoSucursal=?, faxSucursal=? WHERE IdSucursal = ?";
	    	stmt = (PreparedStatement) conn.prepareStatement(upd);
	    	stmt.setString(1, sucursal.getDescSucursal());
	    	stmt.setInt(2, sucursal.getLocalidad().getIdLocalidad());
	    	stmt.setString(3, sucursal.getCalleDirSucursal());
	    	stmt.setString(4, sucursal.getNroExteriorDirSucursal());
	    	stmt.setString(5, sucursal.getNroInteriorDirSucursal());
	    	stmt.setString(6, sucursal.getTelefonoSucursal());
	    	stmt.setString(7, sucursal.getFaxSucursal());
	    	stmt.setInt(8, sucursal.getIdSucursal());
			stmt.execute();
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
    }
}
